package LeetCode;

public class LC5 {
    public static void main(String[] args) {
        LC5 lc5 = new LC5();
        System.out.println(lc5.longestPalindrome("joker"));
    }
    public String longestPalindrome(String s) {
        int len = s.length();
        // dp[i][j]表示从串s[i:j]是不是回文
        boolean[][] dp = new boolean[len][len];
        for(int i=0;i<s.length();i++){
            dp[i][i]=true;
            if(i+1<s.length() && s.charAt(i) == s.charAt(i+1)){
                dp[i][i+1] = true;
            }
        }
        int max =1;
        String ans="";
        for(int i=2;i<s.length();i++){ // 外层循环是回文串的长度，定下一个长度后，相当于是一个滑动窗口
            for(int j=0;j+i<s.length();j++){ // 内层循环是移动滑动窗口
                if(s.charAt(j+i)==s.charAt(j)){
                    dp[j][j+i] = dp[j+1][j+i-1] ;
                    if(dp[j][j+i] && max < i){
                        ans = s.substring(j,j+i);
                        max = i;
                    }
                }
            }
        }
        return ans;
    }


}
